#ifndef _COOLANGAGE_VISITORPROGRAM_H_
#define _COOLANGAGE_VISITORPROGRAM_H_

#include "Expression.h"
#include "Instruction.h"

#include "VisitorExpression.h"
#include "VisitorInstruction.h"

namespace COOLangage {
  class VisitorProgram {
    VisitorInstruction &vinst;
  protected:
    VisitorProgram(VisitorInstruction &vi) : vinst(vi) { }
    ~VisitorProgram() throw() { }

    inline VisitorInstruction& getInnerVisitor() const { return vinst; }
  
    virtual VisitorResult visitDeclarationFonction(DeclarationFonction *f) = 0;
    virtual VisitorResult visitCOOProgram(COOProgram *c) = 0;
  
  };
}

#endif
